From: Owen Taylor Date: Wed, 19 Nov 2008 19:54:17 +0000 (+0000) Subject: Add shell_global_focus_stage() X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~11581 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=8f615e833eb8857cc577627d11e7dbfffa0f51f7;p=gnome-shell.git Add shell_global_focus_stage() Add a a method shell_global_focus_stage() to set the input focus to the stage window, so that Clutter gets keyboard events. Adapted from patch in Bug 561299 from Colin Walters svn path=/trunk/; revision=59 --- diff --git a/src/shell-global.c b/src/shell-global.c index dde40d981..1a186bafe 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -2,6 +2,9 @@ #include "shell-global.h" +#include "display.h" +#include + struct _ShellGlobal { GObject parent; @@ -217,3 +220,21 @@ _shell_global_set_plugin (ShellGlobal *global, global->plugin = plugin; } + +/** + * shell_global_focus_stage: + * + * Set the keyboard focus to the Clutter stage window. This function + * is best used in combination with some sort of visual notification + * that the shell has taken over input. + */ +void +shell_global_focus_stage (ShellGlobal *global) +{ + MetaScreen *screen = mutter_plugin_get_screen (global->plugin); + MetaDisplay *display = meta_screen_get_display (screen); + Display *xdisplay = meta_display_get_xdisplay (display); + ClutterStage *stage = CLUTTER_STAGE (mutter_plugin_get_stage (global->plugin)); + Window stagewin = clutter_x11_get_stage_window (stage); + XSetInputFocus (xdisplay, stagewin, RevertToParent, CurrentTime); +} diff --git a/src/shell-global.h b/src/shell-global.h index f128a2a1e..6f59b811d 100644 --- a/src/shell-global.h +++ b/src/shell-global.h @@ -42,6 +42,10 @@ GList *shell_global_get_windows (ShellGlobal *global); void _shell_global_set_plugin (ShellGlobal *global, MutterPlugin *plugin); +MetaScreen * shell_global_get_screen (ShellGlobal *global); + +void shell_global_focus_stage (ShellGlobal *global); + G_END_DECLS #endif /* __SHELL_GLOBAL_H__ */